package com.baixiaowen.disruptor.Disruptor快速使用;

import com.lmax.disruptor.RingBuffer;

import java.nio.ByteBuffer;

public class OrderEventProducer {

    private RingBuffer<OrderEvent> ringBuffer;

    public OrderEventProducer(RingBuffer<OrderEvent> ringBuffer) {
        this.ringBuffer = ringBuffer;
    }

    public void sendData(ByteBuffer data) {
        // 1. 生产者发送消息的时候，首先需要从 ringBuffer 里获取一个下一个可用的序号
        long sequence = ringBuffer.next();
        try {
            // 2. 根据这个序号，找到具体的 [OrderEvent] 元素, 注意: 此时获取的OrderEvent对象是一个没有被填充的对象(属性没有被赋值)
            OrderEvent orderEvent = ringBuffer.get(sequence);
            // 3. 进行实际的赋值处理
            orderEvent.setValue(data.getLong(0));
        } finally {
            // 4. 提交发布操作
            ringBuffer.publish(sequence);
        }
    }

}
